﻿# CMakeList.txt: 在此处包括源代码并定义
# 项目特定的逻辑。
#

# 将源代码添加到此项目的可执行文件。

project(breaking)

# 启用递归查找所有 .h 文件
file(GLOB_RECURSE HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.h")

# 指定目标文件夹
set(TARGET_INCLUDE_DIR "${SERVER_ROOT_DIR}/bin/include/breaking")
# 先删除指定文件夹下面的所有文件
file(REMOVE_RECURSE ${TARGET_INCLUDE_DIR})

# 复制所有找到的 .h 文件到目标文件夹
foreach(HEADER_FILE ${HEADER_FILES})
    # 获取文件的相对路径
    file(RELATIVE_PATH REL_FILE ${CMAKE_CURRENT_SOURCE_DIR} ${HEADER_FILE})
    
    # 定义目标文件的完整路径
    set(TARGET_FILE_PATH ${TARGET_INCLUDE_DIR}/${REL_FILE})
    
    # 获取目标文件的目录路径
    get_filename_component(TARGET_DIR ${TARGET_FILE_PATH} DIRECTORY)
    
    # 确保目标文件夹存在
    file(MAKE_DIRECTORY ${TARGET_DIR})
    
    # 复制文件
    file(COPY ${HEADER_FILE} DESTINATION ${TARGET_DIR})
endforeach()

# 启用递归查找
file(GLOB_RECURSE PROJECT_CPP
    RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}   # 相对于当前源目录
    "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp"    # 包含当前目录及子目录下的所有 .cpp 文件
    "${CMAKE_CURRENT_SOURCE_DIR}/*.c"      # 包含当前目录及子目录下的所有 .c 文件
    "${CMAKE_CURRENT_SOURCE_DIR}/*.cc"     # 包含当前目录及子目录下的所有 .cc 文件
)

# 输出库文件
add_library(${PROJECT_NAME} STATIC ${PROJECT_CPP})

# 导入头文件
target_include_directories(${PROJECT_NAME}
     PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../"
	 PUBLIC "${SERVER_ROOT_DIR}/3rd/include/"
)

# 如果Cmake版本大于3.12, 启用C++20
if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 20)
endif()
